#!/usr/bin/env python3
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Runs tests for crosvm.
#
# See `ci/README.md` or `./run_tests -h` for more details.

from typing import List, Dict
from ci.test_runner import Requirements, main

# A list of all crates and their requirements
# See ci/test_runner.py for documentation on the requirements
CRATE_REQUIREMENTS: Dict[str, List[Requirements]] = {
    "aarch64": [Requirements.AARCH64],
    "acpi_tables": [],
    "arch": [],
    "assertions": [],
    "base": [],
    "bit_field": [],
    "bit_field_derive": [],
    "common/cros-fuzz": [Requirements.SEPARATE_WORKSPACE],
    "common/p9": [Requirements.SEPARATE_WORKSPACE, Requirements.X86_64],
    "cros_async": [Requirements.DISABLED],
    "crosvm": [Requirements.DO_NOT_RUN],
    "crosvm_plugin": [Requirements.X86_64],
    "data_model": [],
    "devices": [
        Requirements.SINGLE_THREADED,
        Requirements.PRIVILEGED,
        Requirements.X86_64,
    ],
    "disk": [Requirements.PRIVILEGED],
    "enumn": [],
    "fuse": [],
    "fuzz": [Requirements.DISABLED],
    "gpu_display": [],
    "hypervisor": [Requirements.PRIVILEGED, Requirements.X86_64],
    "integration_tests": [Requirements.PRIVILEGED, Requirements.X86_64],
    "io_uring": [
        Requirements.SEPARATE_WORKSPACE,
        Requirements.PRIVILEGED,
        Requirements.SINGLE_THREADED,
    ],
    "kernel_cmdline": [],
    "kernel_loader": [Requirements.PRIVILEGED],
    "kvm_sys": [Requirements.PRIVILEGED],
    "kvm": [Requirements.PRIVILEGED, Requirements.X86_64],
    "libcrosvm_control": [],
    "linux_input_sys": [],
    "net_sys": [],
    "net_util": [Requirements.PRIVILEGED],
    "power_monitor": [],
    "protos": [],
    "qcow_utils": [],
    "resources": [],
    "rutabaga_gfx": [Requirements.CROS_BUILD, Requirements.PRIVILEGED],
    "sync": [],
    "sys_util": [Requirements.SINGLE_THREADED, Requirements.PRIVILEGED],
    "poll_token_derive": [],
    "tempfile": [],
    "tpm2-sys": [],
    "tpm2": [],
    "usb_sys": [],
    "usb_util": [],
    "vfio_sys": [],
    "vhost": [Requirements.PRIVILEGED],
    "virtio_sys": [],
    "vm_control": [],
    "vm_memory": [Requirements.PRIVILEGED],
    "x86_64": [Requirements.X86_64, Requirements.PRIVILEGED],
}

# Just like for crates, lists requirements for each cargo feature flag.
FEATURE_REQUIREMENTS: Dict[str, List[Requirements]] = {
    "chromeos": [Requirements.DISABLED],
    "audio": [],
    "gpu": [Requirements.CROS_BUILD],
    "plugin": [Requirements.PRIVILEGED, Requirements.X86_64],
    "power-monitor-powerd": [Requirements.DISABLED],
    "tpm": [Requirements.CROS_BUILD],
    "video-decoder": [Requirements.DISABLED],
    "video-encoder": [Requirements.DISABLED],
    "wl-dmabuf": [Requirements.DISABLED],
    "x": [],
    "virgl_renderer_next": [Requirements.CROS_BUILD],
    "composite-disk": [],
    "virgl_renderer": [Requirements.CROS_BUILD],
    "gfxstream": [Requirements.DISABLED],
    "gdb": [],
}

main(CRATE_REQUIREMENTS, FEATURE_REQUIREMENTS)
